雖然已經是上個時代的眼淚,但留言板仍然是一個良好的動態網頁練習主題。
$ laravel new message-board
可以利用 Docker 簡單建立 PostgreSQL 的環境
$ docker run --name database \
-p 5432:5432 \
-e POSTGRES_DB=message_board
-e POSTGRES_USER=laravel
-e POSTGRES_PASSWORD=password \
-d postgres
--name
是為了識別 container,若未指定的話,Docker 會自動隨機設定一個名字
docker rm [container_name]
移除原本的 container-p
表示綁定的連接埠,這邊使用 postgres 的預設 port
-e
設定環境變數,根據 Docker Hub 上 PostgreSQL 的說明設定
POSTGRES_DB
:設定資料庫名稱(參閱 .env
)POSTGRES_USER
:設定資料庫的用戶POSTGRES_PASSWORD
:設定用戶密碼,因為是本地開發使用所以簡單一些也無所謂修改 .env
修改連線資訊
# ...
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=message_board
DB_USERNAME=laravel
DB_PASSWORD=password
# ...
最後,執行 Migration 確認連線是否成功,並移除不需要的 migrations。
利用 Laravel Make Model 功能,我們可以建立 Message Model 及其 Migration 與 Factory。
$ php artisan make:model -m -f Message
-f
表示一起建立 Testing Factory<?php
class CreateMessagesTable extends Migration
{
public function up()
{
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('title');
$table->string('content');
$table->string('attachment')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('messages');
}
}
name
用於儲存用戶名,預設由系統隨機生成title
表示留言標題content
表示留言內容attachment
用於儲存附加圖檔儲存的路徑,若為 null
則表示沒有附加圖檔<?php
// app/Models/Message.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
use HasFactory;
protected $fillable = ['name', 'title', 'content', 'attachment'];
}
並且設計 Message Factory
<?php
// database/factories/MessageFactory.php
// ...
class MessageFactory extends Factory
{
public function definition()
{
return [
'name' => Str::random(8),
'title' => $this->faker->sentence,
'content' => implode("\n", $this->faker->sentences),
'attachment' => null,
];
}
}
之後,便可以使用 Tinker Shell 去測試是否資料庫存取正常運作
(tinker) > Message::factory()->create()